package com.douyu.ocean.invoke;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author leiruiqi on 2018/9/11
 */

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface PerformanceAnnotation {

    /**
     * 性能监控项命名，默认为方法名
     * @return
     */
    String name() default "";

    /**
     * 性能监控项类型，可以自定义以做监控类型区分，
     * 表现形式为监控名称的前缀，默认为method_表示方法监控
     * @return
     */
    String type() default "method_";

    /**
     * 是否开启调用拒绝
     * 开启后，会根据历史调用成功率来作为当前的调用率
     * @return
     */
    boolean autoRefuse() default false;

    /**
     * 调用率提升系数，如果autoRefuse()==true 则系数会效果
     * @return
     */
    double boost() default 0d;

    /**
     * 方法执行异常，是否抛出异常
     * 默认会抛出，如果不抛出异常，报错会返回默认值null
     * @return
     */
    boolean throwe() default true;

}
